/**
 * 数据操作模块
 * 操作文件中的数据 只处理数据 不关心业务
 *  */
const fs = require('fs')
const dbPath = './json/db.json'

/**
 * 获取学生列表
 * */
exports.find = (callback) => {
  fs.readFile(dbPath, 'utf-8', (err, data) => {
    if (err) {
      return callback(err)
    }
    return callback(null, JSON.parse(data).students)
  })
}
/**
 * 添加保存学生
 * */
exports.save = (student, callback) => {
  fs.readFile(dbPath, 'utf-8', (err, data) => {
    if (err) {
      return callback(err)
    }

    const students = JSON.parse(data).students
    student.id = students[students.length - 1].id + 1
    students.push(student)
    const fileData = JSON.stringify({
      students: students
    })

    fs.writeFile(dbPath, fileData, (err) => {
      if (err) {
        return callback(err)
      }
      // 成功没有错误 所以错误对象是null
      callback(null)
    })
  })
}
/**
 * 更新学生
 * */
exports.updateById = (student, callback) => {
  fs.readFile(dbPath, 'utf-8', (err, data) => {
    if (err) {
      return callback(err)
    }
    const students = JSON.parse(data).students
    student.id = parseInt(student.id)

    // 你要修改谁 就需要找出谁
    const stu = students.find(({ id }) => ~~id === student.id)

    for (const key in student) {
      stu[key] = student[key]
    }
    console.log(stu, students);

    const fileData = JSON.stringify({
      students: students
    })

    fs.writeFile(dbPath, fileData, (err) => {
      if (err) {
        return callback(err)
      }
      // 成功没有错误 所以错误对象是null
      callback(null)
    })

  })
}

exports.findById = (id, callback) => {
  fs.readFile(dbPath, 'utf-8', (err, data) => {
    if (err) {
      return callback(err)
    }
    const students = JSON.parse(data).students
    const ret = students.find((item) => ~~item.id === id)
    callback(null, ret)
  })
}
/**
 * 删除学生
 * */
exports.deleteById = (id, callback) => {
  fs.readFile(dbPath, 'utf-8', (err, data) => {
    if (err) {
      return callback(err)
    }
    const students = JSON.parse(data).students
    students.splice(students.findIndex((item) => ~~item.id === ~~id), 1)
    
    const fileData = JSON.stringify({
      students: students
    })

    fs.writeFile(dbPath, fileData, (err) => {
      if (err) {
        return callback(err)
      }
      // 成功没有错误 所以错误对象是null
      callback(null)
    })
  })
 }
